/**
 * 在这里定义和用户相关的路由处理函数，供 /router/user.js 模块进行调用
 */
const db = require('../db/index')
const bcrypt = require("bcryptjs");
const jwt = require('jsonwebtoken')
// 导入配置文件
const config = require('../config')

// 注册用户的处理函数
exports.regUser = (req, res) => {
	const userinfo = req.body
	const sql = 'select * from melody_users where username=?'
	db.query(sql, [userinfo.username], function(err, results) {
		// 执行 SQL 语句失败
		if (err) {
			return res.cc(err)
		}
		// 用户名被占用
		if (results.length > 0) {
			return res.cc('用户名被占用，请更换其他用户名！')
		}
		// 对用户的密码,进行 bcrype 加密，返回值是加密之后的密码字符串
		userinfo.password = bcrypt.hashSync(userinfo.password, 10);
		const sql = 'insert into melody_users set ?'
		db.query(sql, {
			username: userinfo.username,
			password: userinfo.password
		}, function(err, results) {
			// 执行 SQL 语句失败
			if (err) return res.cc(err)
			// SQL 语句执行成功，但影响行数不为 1
			if (results.affectedRows !== 1) {
				return res.cc('注册用户失败，请稍后再试！')
			}
			// 注册成功
			res.cc('注册成功！', 0)
		})

	})

}

// 登录的处理函数
exports.login = (req, res) => {
	const userinfo = req.body;
	const sql = "select * from melody_users where (username=? and status=0)";
	db.query(sql, userinfo.username, function(err, results) {
		// 执行 SQL 语句失败
		if (err) return res.cc(err);
		// 执行 SQL 语句成功，但是查询到数据条数不等于 1
		if (results.length !== 1) return res.cc("登录失败！");
		// TODO：判断用户输入的登录密码是否和数据库中的密码一致
		const compareResult = bcrypt.compareSync(userinfo.password, results[0].password)
		if (!compareResult) return res.cc('密码错误!')
		//将密码,用户头像,个性标签内容置空
		const user = {
			...results[0],
			password: '',
			user_pic: '',
			content: ''
		}
		// 生成 Token 字符串
		const tokenStr = jwt.sign(user, config.jwtSecretKey, {
			expiresIn: "10h", // token 有效期为 10 个小时
		});
		res.send({
			status: 0,
			message: '登录成功！',
			// 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
			token: 'Bearer ' + tokenStr,
		})


	});
};

